package cn.demoncat.util.pdf.itextpdf.event;

import com.itextpdf.kernel.events.Event;
import com.itextpdf.kernel.events.IEventHandler;
import com.itextpdf.kernel.events.PdfDocumentEvent;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.layout.property.VerticalAlignment;

import cn.demoncat.util.pdf.itextpdf.entity.PdfParam;

/**
 * 水印
 * 
 * @author 延晓磊
 *
 * @since 2020年6月4日
 */
public class WaterMarker implements IEventHandler {

	// 字体
	private final PdfFont font;
	// 参数
	private final PdfParam param;
	
	/**
	 * 水印处理器
	 * 
	 * @param font	字体
	 * @param param	水印文字、水印角度
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年6月4日
	 */
	public WaterMarker(PdfFont font, PdfParam param) {
		super();
		this.font = font;
		this.param = param;
	}

	/**
	 * 事件监听
	 * 
	 * @param event
	 *
	 * @author 延晓磊
	 *
	 * @since 2020年6月4日
	 */
	@Override
	public void handleEvent(Event event) {
		// 获取文档
		PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
		PdfDocument doc = docEvent.getDocument();
		// 获取页面
		PdfPage page = docEvent.getPage();
		int num = doc.getPageNumber(page);
		// 创建画布
		PdfCanvas pdfCanvas = new PdfCanvas(page.getLastContentStream(), page.getResources(), doc);
		Rectangle pageSize = page.getPageSize();
		Canvas canvas = new Canvas(pdfCanvas, pageSize);
		// 水印文字：文本，字体，透明度，字号
		Paragraph waterMarker = new Paragraph(param.getWater()).setFont(font).setOpacity(0.1f).setFontSize(30);
		// 绘制水印
		float textWidth = param.getWater().length() * 30;
		float x;
		float y = 0;
		for (int i = 0; i < 15; i++) {
			x = 0;
			for (int j = 0; j < 5; j++) {
				// 水印，原点左边距，原点底边距，页码，基于原点（左下角）填充（右上方贴边隐藏），旋转
				canvas.showTextAligned(waterMarker, x, y, num, TextAlignment.LEFT, VerticalAlignment.BOTTOM, param.getWaterAngle());
				x += textWidth + 60;
			}
			y += 90;
		}
		canvas.close();
	}
}
